package visao;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.text.MaskFormatter;

import modelo.Funcionario;
import modelo.Localizacao;
import auxiliar.Ramdom;
import controle.ControleFuncionario;
import javax.swing.JRadioButton;

import de.javasoft.plaf.synthetica.SyntheticaBlackEyeLookAndFeel;
import de.javasoft.plaf.synthetica.SyntheticaSimple2DLookAndFeel;
/**
 * 
 * @author douglas_joaquim  
 * 
 * Classe de viso CadastroFuncionario
 */
public class CadastroFuncionario extends JFrame {

	private JPanel contentPane;
	private JTextField txtNome;
	private JTextField txtSobrenome;
	
	private JTextField txtEmail;
	private JTextField txtRua;
	private JTextField txtNumero;
	private JTextField txtCidade;

	private JTextField txtCep;
	private JTextField txtCarteiradeTrabalho;
	private JTextField txtSenha;

	private Funcionario funcionario2 = new Funcionario();
	private Funcionario funcionario = new Funcionario();
	private boolean sexo;
	Ramdom gerarSenhas = new Ramdom();
	private JComboBox cboxEstado;
	private JFormattedTextField txtCpf;
	private JTextField txtBairro;
	private JFormattedTextField txtDataDeNascimento;
	private JFormattedTextField txtTelefone;
	private JButton btnBuscar;
	private JButton btnCadastrar;
	private JButton btnExcluir;
	private JRadioButton rdbtnMasculino;
	private JRadioButton rdbtnFeminino;
	Localizacao localizacao = new Localizacao();
	
        /**
         * Metodo para abri tela
         * 
         * @param status
         * @param funcionario2 
         */
	protected void abreTela(int status,Funcionario funcionario2){
		this.funcionario2 = funcionario2;
		btnExcluir.setEnabled(false);
		btnCadastrar.setEnabled(false);
		txtBairro.setEditable(false);
		txtCarteiradeTrabalho.setEditable(false);
		txtCep.setEditable(false);
		txtCidade.setEditable(false);
		txtDataDeNascimento.setEditable(false);
		txtEmail.setEditable(false);
		txtNome.setEditable(false);
		txtNumero.setEditable(false);
		txtRua.setEditable(false);
		txtSenha.setEditable(false);
		txtSobrenome.setEditable(false);
		txtTelefone.setEditable(false);
		cboxEstado.setEnabled(false);
		rdbtnFeminino.setEnabled(false);
		rdbtnMasculino.setEnabled(false);
		btnCadastrar.setEnabled(false);
	}
	/**
         * Medodo main
         * 
         * @param args 
         */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					UIManager.setLookAndFeel(new SyntheticaSimple2DLookAndFeel());
					CadastroFuncionario frame = new CadastroFuncionario();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Criao do frame.
	 */
	public CadastroFuncionario() {
		setTitle("Cadastro de Funcionario");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 521, 544);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNome = new JLabel("Nome");
		lblNome.setBounds(37, 57, 72, 14);
		contentPane.add(lblNome);
		
		JLabel lblSobrenome = new JLabel("Sobrenome");
		lblSobrenome.setBounds(37, 114, 103, 14);
		contentPane.add(lblSobrenome);
		
		JLabel lblRua = new JLabel("Rua");
		lblRua.setBounds(295, 101, 46, 14);
		contentPane.add(lblRua);
		
		JLabel lblCep = new JLabel("Cep");
		lblCep.setBounds(295, 412, 46, 14);
		contentPane.add(lblCep);
		
		JLabel lblCpf = new JLabel("CPF");
		lblCpf.setBounds(37, 232, 46, 14);
		contentPane.add(lblCpf);
		
		JLabel lblCidade = new JLabel("Cidade\r\n");
		lblCidade.setBounds(295, 357, 82, 14);
		contentPane.add(lblCidade);
		
		JLabel lblEmail = new JLabel("EMAIL");
		lblEmail.setBounds(295, 295, 46, 14);
		contentPane.add(lblEmail);
		
		JLabel lblTelefone = new JLabel("Telefone");
		lblTelefone.setBounds(295, 232, 46, 14);
		contentPane.add(lblTelefone);
		
		JLabel lblDataDeNascimento = new JLabel("Data de Nascimento");
		lblDataDeNascimento.setBounds(37, 295, 124, 14);
		contentPane.add(lblDataDeNascimento);
		
		JLabel lblNumer = new JLabel("Numero");
		lblNumer.setBounds(429, 101, 65, 14);
		contentPane.add(lblNumer);
		
		JLabel lblBairro = new JLabel("Bairro");
		lblBairro.setBounds(295, 167, 65, 14);
		contentPane.add(lblBairro);
		
		txtNome = new JTextField();
		txtNome.setBounds(37, 70, 166, 20);
		contentPane.add(txtNome);
		txtNome.setColumns(10);
		
		txtSobrenome = new JTextField();
		txtSobrenome.setBounds(37, 125, 166, 20);
		contentPane.add(txtSobrenome);
		txtSobrenome.setColumns(10);
/*
		try {
			txtCpf = new JFormattedTextField(new MaskFormatter("###.###.###-##"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
*/
		
		try {
			txtDataDeNascimento = new JFormattedTextField(new MaskFormatter("##/##/####"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		txtEmail = new JTextField();
		txtEmail.setBounds(295, 309, 166, 20);
		contentPane.add(txtEmail);
		txtEmail.setColumns(10);
		
		txtRua = new JTextField();
		txtRua.setBounds(295, 114, 124, 20);
		contentPane.add(txtRua);
		txtRua.setColumns(10);
		
		txtNumero = new JTextField();
		txtNumero.setBounds(426, 114, 45, 20);
		contentPane.add(txtNumero);
		txtNumero.setColumns(10);
		
		txtCidade = new JTextField();
		txtCidade.setBounds(295, 369, 124, 20);
		contentPane.add(txtCidade);
		txtCidade.setColumns(10);
		
		txtBairro = new JTextField();
		txtBairro.setBounds(295, 192, 157, 20);
		contentPane.add(txtBairro);
		txtBairro.setColumns(10);
		
		try {
			txtTelefone = new JFormattedTextField(new MaskFormatter("(##) ####-#####"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			txtCep =new JFormattedTextField(
					new MaskFormatter("#####-###"));
		} catch (ParseException e3) {
			// TODO Auto-generated catch block
			e3.printStackTrace();
		}
		txtCep.setBounds(295, 427, 176, 20);
		contentPane.add(txtCep);
		txtCep.setColumns(10);
		/**
                 * Boto cadastrar
                 */
		btnCadastrar = new JButton("Cadastrar");
		btnCadastrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				
				ControleFuncionario controleFuncionario = new ControleFuncionario();
				
				SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
				funcionario.setNome(txtNome.getText());
				funcionario.setSobrenome(txtSobrenome.getText());
				funcionario.setCtps(txtCarteiradeTrabalho.getText());
				funcionario.setSenha(txtSenha.getText());
				funcionario.setCpf(txtCpf.getText());
				funcionario.setTelefone(txtTelefone.getText());
				funcionario.setSexo(sexo);
				Date nascimento = new Date();
				try {
					nascimento = sdf.parse(txtDataDeNascimento.getText());
				} catch (ParseException e2) {
					// TODO Auto-generated catch block
					//e2.printStackTrace();
				}
				
				funcionario.setNascimento(nascimento);
				funcionario.setEmail(txtEmail.getText());
				funcionario.setTelefone(txtTelefone.getText()); 
				localizacao.setCep(txtCep.getText());
				localizacao.setRua(txtRua.getText());
				localizacao.setNumero(txtNumero.getText());
				localizacao.setEstado((String)cboxEstado.getSelectedItem());
				
				localizacao.setCidade(txtCidade.getText());
				localizacao.setBairro(txtBairro.getText());
				
				funcionario.setLocalizacao(localizacao);
				
				
				try {
					
					controleFuncionario.salvar(funcionario);
					
				} catch (Exception e1) {
					JOptionPane.showMessageDialog(null, "erro" + e1.getMessage());
					//e1.printStackTrace();
				}
				Menu menu=new Menu() ;
				menu.abreTela(1, funcionario2);
				menu.setVisible(true);
				dispose();
				
			}
		});
		btnCadastrar.setBounds(167, 483, 91, 23);
		contentPane.add(btnCadastrar);
		
		JLabel lblEstado = new JLabel("Estado");
		lblEstado.setBounds(429, 357, 46, 14);
		contentPane.add(lblEstado);
		
		cboxEstado = new JComboBox();
		cboxEstado.setBounds(425, 368, 51, 22);
		cboxEstado.setModel(new DefaultComboBoxModel(new String[] {"", "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR \t", "SC", "SP", "SE", "TO"}));
		cboxEstado.setMaximumRowCount(27);
		contentPane.add(cboxEstado);
		
		txtCarteiradeTrabalho = new JTextField();
		txtCarteiradeTrabalho.setBounds(37, 427, 166, 20);
		contentPane.add(txtCarteiradeTrabalho);
		txtCarteiradeTrabalho.setColumns(10);
		
		JLabel lblCarteiraDeTrabalho = new JLabel("Casteira de Trabalho");
		lblCarteiraDeTrabalho.setBounds(37, 412, 166, 14);
		contentPane.add(lblCarteiraDeTrabalho);
		/**
                 * Boto buscar
                 */
		btnBuscar = new JButton("Buscar");
		btnBuscar.addActionListener(new ActionListener() {
		
				public void actionPerformed(ActionEvent e) {
					if (btnBuscar.getText().equals("Buscar")) {
					
					ControleFuncionario controleFuncionario = new ControleFuncionario();
				
					
					funcionario.setCpf(txtCpf.getText());
					funcionario.setNome(txtNome.getText());
					
					
					try {
						
						funcionario = controleFuncionario.buscar(funcionario).get(0);
						JOptionPane.showMessageDialog(null, "Funcionario Encontrado");
						
					
					} catch (Exception e1) {
						JOptionPane.showMessageDialog(null,"Funcionario nao existe");
					}
					
					txtNome.setText(funcionario.getNome());
					txtSobrenome.setText(funcionario.getSobrenome());
					txtCpf.setText(funcionario.getCpf());
					SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
					txtEmail.setText(funcionario.getEmail());
					txtTelefone.setText(funcionario.getTelefone());
					txtSenha.setText(funcionario.getSenha());
					txtCarteiradeTrabalho.setText(funcionario.getCtps());
					sexo = funcionario.isSexo();
					localizacao.setIdLocalizacao(funcionario.getId());
					
					if(sexo){
						rdbtnMasculino.setSelected(true);
						rdbtnFeminino.setSelected(false);
					}else{
						rdbtnMasculino.setSelected(false);
						rdbtnFeminino.setSelected(true);
					}
					
					for (int i = 0; i < cboxEstado.getItemCount(); i++) {
						if(cboxEstado.getItemAt(i).equals(funcionario.getLocalizacao().getEstado())){
							
							cboxEstado.setSelectedIndex(i);
						}
						
					}
					cboxEstado.setSelectedItem(funcionario.getLocalizacao().getEstado());
					
					
					txtBairro.setText(funcionario.getLocalizacao().getBairro());
					txtCep.setText(funcionario.getLocalizacao().getCep());
					txtRua.setText(funcionario.getLocalizacao().getRua());
					txtNumero.setText(funcionario.getLocalizacao().getNumero());
					cboxEstado.setSelectedItem(funcionario.getLocalizacao().getEstado());
					txtCidade.setText(funcionario.getLocalizacao().getCidade());
					txtBairro.setEditable(false);
					txtCarteiradeTrabalho.setEditable(false);
					txtCep.setEditable(false);
					txtCidade.setEditable(false);
					txtDataDeNascimento.setEditable(false);
					txtEmail.setEditable(false);
					txtNome.setEditable(false);
					txtNumero.setEditable(false);
					txtRua.setEditable(false);
					txtSenha.setEditable(false);
					txtSobrenome.setEditable(false);
					txtTelefone.setEditable(false);
					cboxEstado.setEnabled(false);
					rdbtnFeminino.setEnabled(false);
					rdbtnMasculino.setEnabled(false);
					btnCadastrar.setEnabled(false);
					btnExcluir.setEnabled(true);
					
					
					try {
						txtDataDeNascimento.setText(sdf.format(funcionario.getNascimento()));	
						btnBuscar.setText("Editar");
					} catch (Exception e2) {
						txtBairro.setEditable(true);
						txtCarteiradeTrabalho.setEditable(true);
						txtCep.setEditable(true);
						txtCidade.setEditable(true);
						txtDataDeNascimento.setEditable(true);
						txtEmail.setEditable(true);
						txtNome.setEditable(true);
						txtNumero.setEditable(true);
						txtRua.setEditable(true);
						txtSenha.setEditable(true);
						txtSobrenome.setEditable(true);
						txtTelefone.setEditable(true);
						cboxEstado.setEnabled(true);
						rdbtnFeminino.setEnabled(true);
						rdbtnMasculino.setEnabled(true);
						rdbtnMasculino.setSelected(false);
						rdbtnFeminino.setSelected(false);
						btnCadastrar.setEnabled(true);
						btnExcluir.setEnabled(false);
						
					}
					
				}else{
					txtBairro.setEditable(true);
					txtCarteiradeTrabalho.setEditable(true);
					txtCep.setEditable(true);
					btnCadastrar.setEnabled(true);
					txtCidade.setEditable(true);
					txtDataDeNascimento.setEditable(true);
					txtEmail.setEditable(true);
					txtNome.setEditable(true);
					txtNumero.setEditable(true);
					txtRua.setEditable(true);
					txtSenha.setEditable(true);
					txtSobrenome.setEditable(true);
					txtTelefone.setEditable(true);
					cboxEstado.setEnabled(true);
					rdbtnFeminino.setEnabled(true);
					rdbtnMasculino.setEnabled(true);
					btnExcluir.setEnabled(false);
					btnBuscar.setEnabled(false);
					btnCadastrar.setText("Salvar");
					
				}
					
		 }});
				
		
		btnBuscar.setBounds(37, 483, 91, 23);
		contentPane.add(btnBuscar);
		/**
                 * Boto excluir
                 */
		btnExcluir = new JButton("Excluir\r\n");
		btnExcluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ControleFuncionario controleFuncionario = new ControleFuncionario();
				controleFuncionario.excluir(funcionario);
				JOptionPane.showMessageDialog(null, "Funcionario excluido");
				Menu menu=new Menu() ;
				menu.abreTela(1, funcionario2);
				menu.setVisible(true);
				dispose();
			}
		});
		btnExcluir.setBounds(295, 483, 91, 23);
		contentPane.add(btnExcluir);
		
		JLabel lblSenha = new JLabel("Senha");
		lblSenha.setBounds(37, 357, 46, 14);
		contentPane.add(lblSenha);
		
		txtSenha = new JTextField();
		txtSenha.setBounds(37, 369, 166, 20);
		contentPane.add(txtSenha);
		txtSenha.setColumns(10);
		try {
			txtCpf = new JFormattedTextField(new MaskFormatter("###.###.###-##"));
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			//e1.printStackTrace();
		}
		txtCpf.setBounds(37, 257, 166, 20);
		contentPane.add(txtCpf);
		
		try {
			txtDataDeNascimento = new JFormattedTextField(new MaskFormatter("##/##/####"));
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			//e1.printStackTrace();
		}
		txtDataDeNascimento.setBounds(37, 326, 166, 20);
		contentPane.add(txtDataDeNascimento);
		
		try {
			txtTelefone = new JFormattedTextField(new MaskFormatter("(##) ####-#####"));
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			//e1.printStackTrace();
		}
		txtTelefone.setBounds(289, 257, 163, 20);
		contentPane.add(txtTelefone);
		

		
		
		JLabel lblSexo = new JLabel("Sexo");
		lblSexo.setBounds(37, 156, 46, 14);
		contentPane.add(lblSexo);
		
	
		rdbtnMasculino = new JRadioButton("Masculino");
		rdbtnMasculino.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				rdbtnMasculino.setSelected(true);
				rdbtnFeminino.setSelected(false);
				sexo = true;
			}
		});
		rdbtnMasculino.setBounds(24, 191, 103, 23);
		contentPane.add(rdbtnMasculino);
		
		rdbtnFeminino = new JRadioButton("Feminino");
		rdbtnFeminino.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				rdbtnFeminino.setSelected(true);
				rdbtnMasculino.setSelected(false);
				sexo = false;
				
			}
		});
		rdbtnFeminino.setBounds(143, 191, 138, 23);
		contentPane.add(rdbtnFeminino);
		
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Menu menu=new Menu() ;
				menu.abreTela(1, funcionario);
				menu.setVisible(true);
				dispose();

			}
		});
		btnCancelar.setBounds(398, 480, 117, 29);
		contentPane.add(btnCancelar);
		
		
	}
}
